﻿#pragma once


#include <QTreeWidget>
#include <Global.h>

namespace Domy {

/**
 * @brief The IssuesBrowser class
 * @note  问题列表
 */
class IssuesBrowser : public QTreeWidget
{
    Q_OBJECT
public:
    explicit IssuesBrowser(QWidget *parent = Q_NULLPTR);
    ~IssuesBrowser();

    /**
     * @brief appendWarningIssues
     * @note  追加警告问题
     * @param issues 错误问题
     */
    void appendWarningIssues(const Issues &issues);

    /**
     * @brief appendErrorIssues
     * @note  追加错误问题
     * @param issues 错误问题
     */
    void appendErrorIssues(const Issues &issues);

    /**
     * @brief setWarningIssuesList
     * @note  设置告警问题列表
     * @param warning_list 告警问题列表
     */
    void setWarningIssuesList(const QList<Issues> &warning_list);

    /**
     * @brief setErrorIssuesList
     * @note  设置错误问题列表
     * @param error_list 错误问题列表
     */
    void setErrorIssuesList(const QList<Issues> &error_list);

    /**
     * @brief setWarningIssuesListVisible
     * @note  设置告警问题列表可见性
     * @param visible 可见性
     */
    void setWarningIssuesListVisible(bool visible);

    /**
     * @brief setErrorIssuesListVisible
     * @note  设置错误问题列表可见性
     * @param visible 可见性
     */
    void setErrorIssuesListVisible(bool visible);

    /**
     * @brief clearIssues
     * @note  清除问题
     */
    void clearIssues();

    /**
     * @brief toByteArray
     * @note  转为字节流
     */
    QByteArray toByteArray();

    /**
     * @brief setLineColumnVisible
     * @note  设置行号列号可见性
     * @param visible 可见性
     */
    void setLineColumnVisible(bool visible);

protected:
    virtual void showEvent(QShowEvent *event) override;
    virtual void resizeEvent(QResizeEvent *event) override;

private slots:
    void slotOnCustomContextMenuRequest(const QPoint &pos);

private:
    void updateIssues();
    void updateColumnSize();

    QTreeWidgetItem *createItem(IssuesType type, const Issues &issues);

private:
    bool m_warning_visible;

    bool m_error_visible;

    QList<Issues> m_warning_list;
    QList<Issues> m_error_list;
};

} // namespace Domy
